#!/usr/bin/env python3 
# -*- coding:utf-8 -*-

import urllib.request
import urllib.error
import urllib.parse


# response = urllib.request.urlopen('https://www.mmtvip.com/')
# result = response.read().decode('utf-8')
# print(result)

"""
urlopen方法
def urlopen(url, data=None, timeout=socket._GLOBAL_DEFAULT_TI
            MEOUT,*, cafile=None, capath=None, 
            cadefault=False, context=None):
            
url：即是我们输入的url网址，（如：http://www.xxxx.com/）；            
data：是我们要发给服务器请求的额外信息（比如登录网页需要主动填写的用户信息）。如果需要添加data参数，那么是POST请求，默认无data参数时，就是GET请求；
    一般来讲，data参数只有在http协议下请求才有意义
    data参数被规定为byte object，也就是字节对象
    data参数应该使用标准的结构，这个需要使用urllib.parse.urlencode()将data进行 转换，而一般我们把data设置成字典格式再进行转换即可；data在以后实战中会介绍如何使用
    
timeout：是选填的内容，定义超时时间，单位是秒，防止请求时间过长，不填就是默认的时间；

            
"""

# headers = {'User_Agent': 'Mozilla/5.0 (X11; Ubuntu;Linux x86_64; rv:57.0) Gecko/20100101 Firefox/57.0'}
# response = urllib.request.Request('https://www.mmtvip.com/', headers=headers)
# html = urllib.request.urlopen(response)
# result = html.read().decode('utf-8')
# print(result)

"""
结果和前面urlopen是一样的，前面提到urlopen除了可以接受指定参数，也可以接受Request类的对象。' '里面填写自己浏览器的信息即可
"""

"""
urllib库的error方法:
error属性里面主要包括了两个重要的exception类，URLError类和HTTPError类

URLError类:

    URLError类是OSError的子类，继承OSError，没有自己的任何行为特点，但是将作为error里面所有其它类型的基类使用。
    URLError类初始化定义了reason参数，意味着当使用URLError类的对象时，可以查看错误的reason。
    
HTTPError类:
    HTTPError是URLError的子类，当HTTP发生错误将举出HTTPError。
    HTTPError也是HTTP有效回应的实例，因为HTTP协议错误是有效的回应，包括状态码，headers和body。所以看到在HTTPError初始化的时候定义了这些有效回应的参数。
    当使用HTTPError类的对象时，可以查看状态码，headers等。
"""

# try:
#     headers = {'User_Agent': 'Mozilla/5.0 (X11; Ubuntu;Linux x86_64; rv:57.0) Gecko/20100101 Firefox/57.0'}
#     response = urllib.request.Request('https://www.mmtvip.com/', headers=headers)
#     html = urllib.request.urlopen(response)
#     result = html.read().decode('utf-8')
#     print(result)
# except urllib.error.HTTPError as e:
#     if hasattr(e, 'reason'):
#         print(str(e.reason))
# except urllib.error.URLError as e:
#     if hasattr(e, 'code'):
#         print('错误状态码是' + str(e.code))
# else:
#     print('请求成功通过。')

"""
http post
"""
headers = {'Accept': '*/*',
           'Accept-Language': 'zh-CN,zh;q=0.9',
           'User-Agent': 'Mozilla/5.0 (Windows NT 6.3;'
                         'Win64; x64) AppleWebKit/537.36'
                         '(KHTML, like Gecko)Chrome/48.0'
                         '.2564.48 Safari/537.36',
           'X-Requested-With': 'XMLHttpRequest',
           'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
           }

value = {
    'name': '18658736660',
    'password': 'mmtCm1993@'
}

# 发起 http post 请求
try:
    data = urllib.parse.urlencode(value).encode('utf8')
    response = urllib.request.Request(
        'https://www.mmtvip.com/login', data=data, headers=headers)
    html = urllib.request.urlopen(response)
    print(html.read().decode('utf-8'))
except urllib.error.URLError as e:
    if hasattr(e, 'reason'):
        print('错误原因是:' + str(e.reason))
else:
    print('success')

accountUrl = 'https://www.mmtvip.com/front/account/home'
response = urllib.request.urlopen(accountUrl)
result = response.read().decode('utf-8')
print(result)
